package com.数组;

import java.util.Arrays;
import java.util.Random;

/**
 * 给定一个排序数组，你需要在 原地 删除重复出现的元素，使得每个元素只出现一次，返回移除后数组的新长度。
 *
 * 不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
 *
 *
 *
 * 示例 1:
 *
 * 给定数组 nums = [1,1,2],
 *
 * 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
 *
 * 你不需要考虑数组中超出新长度后面的元素。
 */
public class 删除排序数组中的重复项 {
    static class Solution {
        public int removeDuplicates2(int[] nums) {
            if (nums.length == 0) return 0;
            int i = 0;
            for (int j = 1; j < nums.length; j++) {
                if (nums[j] != nums[i]) {
                    i++;
                    nums[i] = nums[j];
                }
            }
            return i + 1;
        }
        /**
         * 1.先将数组排序，用双指针比较，将相同的设置为1个随机数，
         * 2.再使用双指针将随机数去掉。
         * @param nums
         * @return
         */
        public int removeDuplicates(int[] nums) {
            Arrays.sort(nums);
            int i = 0;
            int radom = new Random().nextInt();
            for(int j = 1 ;j<nums.length;j++){
                if (nums[i] == nums[j]){
                    nums[j] = radom;
                }
                else{
                    i  = j;

                }
            }
            i = 0;
            for(int j = 0;j<nums.length;j++){
                if(nums[j] != radom){
                    nums[i] = nums[j];
                    i++;
                }
            }
            return i;
        }


    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.removeDuplicates2(new int[]{1,2,4,5,7,8,1,2,4,5,8,7});
    }

}
